package educar.controllers;


import java.io.File;

import javax.swing.filechooser.FileSystemView;

import educar.gui.AlumnoView;
import educar.gui.IView;
import educar.gui.newAlumnoView;
import educar.models.Actividad;
import educar.models.Alumno;
import educar.models.Realizacion;
import educar.models.Resolucion;
import educar.models.Session;
import educar.models.alumnoNotFound;
import educar.models.Materia;
import educar.models.materiaNotFound;
import educar.models.resolucionNotFound;


import educar.utils.Archivo;

public class AlumnoController implements IController
{
    private newAlumnoView view;
    private Alumno alumno;
    private Materia materiaSeleccionadaParaInscripcion;
    private Actividad actividadSeleccionada;
    private Realizacion realizacion;


    public AlumnoController()
    {
        String dni = Session.getCurrentUser().getDniUser();
        try
        {
            alumno = Alumno.getAlumnoByDni(dni);
        }
        catch (alumnoNotFound e)
        {
            e.printStackTrace();
        }
    }

    public void setView(IView view)
    {
        this.view = (newAlumnoView) view;
        cargarDatosPersonales();
        //actualizarMateriasParaInscribirse();
        actualizarMateriasYaInscriptas();
        actualizarActividades();
    }

    public void process(String model)
    {
       // if (model.compareTo(AlumnoView.INSCRIBIRSE) == 0)
         //   inscribir();
        if (model.compareTo(AlumnoView.ENVIAR) == 0)
            enviar();
    }

    private void enviar()
    {
        if (!realizado())
        {
            Resolucion r = null;
            Realizacion realiza = null;
            r = new Resolucion(null, null);
            r.save();
            realiza = new Realizacion(alumno, actividadSeleccionada, r);
            realiza.save();
            try
            {
                File root = new File(view.getAExaminarRuta());
                FileSystemView system = FileSystemView.getFileSystemView();
                String destino = system.getHomeDirectory() + "/unrc-educar/resoluciones/";
                File dfile = new File(destino);
                dfile.mkdirs();
                destino += r.getCodigo();//TODO: PONER LA EXTENSION
                File f = new File(destino);

                Archivo.copiar(root, f);
            }
            catch (Exception e)
            {
                e.printStackTrace();
                view.present("Archivo no valido");
            }
            view.present("Enviado correctamente");
        }
        else
            view.present("Ya se envio una resolucion anteriormente");

    }

    private boolean realizado()
    {
        boolean res = true;
        try
        {
            Realizacion.getRealizacionByActividadAlumno(actividadSeleccionada, alumno);
        }
        catch (resolucionNotFound e)
        {
            res = false;
        }

        return res;
    }

    public void processItemList(String name, String item)
    {
        if (item.compareTo("materiasParaInscribirseList") == 0 || item.compareTo("materiasInscriptoYaList") == 0)
            actualizarMateria(name, item);
        else if (item.compareTo("actividadesList") == 0)
            actualizarActividad(name);

    }

    private void actualizarActividad(String name)
    {
        try
        {
            actividadSeleccionada = Actividad.getbyCodigo(name);
            Materia m = actividadSeleccionada.getMateria();

            realizacion = new Realizacion(alumno, actividadSeleccionada);

            view.setACodigo(actividadSeleccionada.getCodigoActividad());
            view.setADescripcion(actividadSeleccionada.getDescripcion());
            //view.setAMateria(m.getNombre());
            try
            {
                realizacion = Realizacion.getRealizacionByActividadAlumno(actividadSeleccionada, alumno);
                view.setANota(realizacion.getResolucion().getNota());
                view.setAProfesor(realizacion.getResolucion().getDocente().getApellido() + ", " + realizacion.getResolucion().getDocente().getNombre());
                view.setAFecha(realizacion.getFechaYHora());
                view.setACodRes(realizacion.getResolucion().getCodigo());
            }
            catch (Exception e)
            {
                resetCorreccionAnterior();

            }


            //TODO:
            //view.setAuxiliares(m.getAllAuxiliares());
            //view.setMProfesor(m.getDniResponsable());

        }
        catch (Exception e)
        {
            view.present("Error al actualizar actividades");
        }
    }

    private void resetCorreccionAnterior()
    {
        view.setANota("");
        view.setAProfesor("");
        view.setAFecha("");
        view.setACodRes("");
    }

    private void actualizarMateria(String name, String item)
    {
        try
        {
            Materia m = Materia.getMateriabyCodigo(name);
            view.setMCodigo(m.getCodigo());
            view.setMNombre(m.getNombre());
            if (item.compareTo("materiasParaInscribirseList") == 0)
                materiaSeleccionadaParaInscripcion = m;

            view.setMAuxiliares(m.getAllNombresAuxiliares());
            view.setMProfesor(m.getNombreResponsable());
        }
        catch (materiaNotFound e)
        {
            view.present("Error al seleccionar materia");
        }
    }
    /*
    public void inscribir()
    {
        if (alumno.inscribir(materiaSeleccionadaParaInscripcion))
        {
            actualizarMateriasYaInscriptas();
        }
        else
            view.present("Error al inscribir");
    }

    private void actualizarMateriasParaInscribirse()
    {
        String materias[] = Materia.getAllMateriasArray();
        view.setMateriasParaInscribirse(materias);

    }
*/
    private void actualizarMateriasYaInscriptas()
    {
        String materias[] = alumno.getAllMateriasInscripto();
        view.setMaterias(materias);
    }

    private void actualizarActividades()
    {
        String actividades[] = alumno.getAllActividadesArray();
        view.setActividades(actividades);

    }

    private void cargarDatosPersonales()
    {
        view.setDPNroAlumno(alumno.getCodigo());
        view.setDPDni(alumno.getDni());
        view.setDPApellido(alumno.getApellido());
        view.setDPNombre(alumno.getNombre());
        view.setDPPais(alumno.getPais());
        view.setDPProvincia(alumno.getProvincia());
        view.setDPCiudad(alumno.getCiudad());
        view.setDPDireccion(alumno.getDireccion());
        view.setDPTelefono(alumno.getTelPersonal());
        view.setDPEmail(alumno.getEmail());
        view.setDPFoto(alumno.getFoto());
        
    }
}
